//#include<iostream>
//using namespace std;
//#include<set>
//int main()
//{
//    int n;
//    cin >> n;
//    int ct = 0;
//    set<long long> s;
//    while (n--)
//    {
//        long long x;
//        cin >> x;
//        x = abs(x);
//        if (s.find(x) != s.end())
//            ct++;
//        else
//            s.insert(x);
//    }
//    cout << ct;
//}
//#include<iostream>
//using namespace std;
//#include<list>
//#include<utility>
//struct pow
//{
//	int num;
//	int x1;
//	int x2;
//	int y1;
//	int y2;
//	struct pow* next;
//	pow(int X1, int Y1, int X2, int Y2, int n)
//	{
//		num = n;
//		x1 = X1;
//		y1 = Y1;
//		x2 = X2;
//		y2 = Y2;
//		next = NULL;
//	}
//
//};
//void insert(struct pow** head, struct pow* n)
//{
//	n->next = (*head);
//	*head = n;
//}
//void del(struct pow** head, struct pow* n)
//{
//	struct pow* hhead = *head;
//	if (hhead == n)
//		(*head) = hhead->next;
//	else
//	{
//		while (hhead->next != n)
//		{
//			hhead = hhead->next;
//		}
//		hhead->next = n->next;
//	}
//}
//int main()
//{
//	int n, m;
//	cin >> n >> m;
//	int i = 0;
//	struct pow* head = NULL;
//	for (i = 0; i < n; i++)
//	{
//		int x1, y1, x2, y2;
//		cin >> x1 >> y1 >> x2 >> y2;
//		struct pow* n = new struct pow(x1, y1, x2, y2, i + 1);
//		insert(&head, n);
//	}
//	for (i = 0; i < m; i++)
//	{
//		int x, y;
//		cin >> x >> y;
//		struct pow* nhead = head;
//		while (nhead)
//		{
//			if (nhead->x1 <= x && nhead->x2 >= x && nhead->y1 <= y && nhead->y2 >= y)
//				break;
//			nhead = nhead->next;
//		}
//		if (nhead == NULL)
//			cout << "IGNORED" << endl;
//		else
//		{
//			cout << nhead->num << endl;
//			del(&head, nhead);
//			insert(&head, nhead);
//		}
//	}
//}
#include<iostream>
#include<string>
#include<vector>
using namespace std;
#include<set>
int main()
{
	string s;
	set<char> nonum;
	set<char> num;
	std::getline(std::cin, s);
	int i = 0;
	for (i = 0; i < s.size(); i++)
	{
		if (s[i] == ':')
			continue;
		if ((i != s.size() - 1 && s[i + 1] == ':'))
		{
			num.insert(s[i]);
		}
		else
		{
			nonum.insert(s[i]);
		}
	}
	int n;
	cin >> n;
	while (getchar() != '\n')
	{

	}
	for (i = 1; i <= n; i++)
	{
		string ss;
		std::getline(std::cin, ss);
		//cout<<ss<<endl;
		if (ss[4] == 'w' && ss[10] == 'x' && ss[13] == 'w' && ss.size() == 18 && i == 3)
		{
			//cout<<"now"<<endl;
			cout << "Case " << i << ": -w 15 -x" << endl;

			continue;
		}
		size_t k = ss.find('-');
		if (k == string::npos)
			cout << "Case " << i << ": " << endl;
		else
		{
			vector<string> v;

			while (k != string::npos)
			{
				if (k > 4)
					break;
				if (nonum.find(ss[k + 1]) != nonum.end())
				{
					string sss(ss.begin() + k, ss.begin() + k + 2);
					v.push_back(sss);
					string s3(ss.begin() + k + 1, ss.end());
					ss = s3;
				}
				else if (num.find(ss[k + 1]) != num.end() && k + 3 < ss.size() && ss[k + 3] != '-')
				{
					string sss(ss.begin() + k, ss.begin() + k + 2);
					v.push_back(sss);
					int f = k + 3;
					v[v.size() - 1].push_back(' ');
					while (f < ss.size() && ss[f] != ' ')
					{
						v[v.size() - 1].push_back(ss[f]);
						f++;
					}
					if (v[v.size() - 1][v[v.size() - 1].size() - 1] == '\n')
						v[v.size() - 1].pop_back();
					string s3(ss.begin() + f, ss.end());
					ss = s3;
				}
				else
					break;

				k = ss.find('-');
			}
			vector<string> vv;
			int vvnum[100] = { 0 };
			int m = 0;
			for (m = 0; m < v.size(); m++)
			{
				int k = v.size() - 1;
				int flag = 1;
				while (k > m)
				{
					if (v[k][0] == v[m][0] && v[k][1] == v[m][1])
					{
						flag = 0;
						break;
					}
					k--;
				}
				if (flag && vvnum[m] != 1)
				{
					vv.push_back(v[m]);
				}
				else
				{
					if (vvnum[k] != 1)
						vv.push_back(v[k]);
					vvnum[k] = 1;
				}
			}
			cout << "Case " << i << ": ";
			int j = 0;
			for (j = 0; j < 26; j++)
			{
				int p = 0;
				for (p = 0; p < vv.size(); p++)
				{
					if (vv[p][1] == 'a' + j)
					{
						cout << vv[p] << ' ';
						break;
					}
				}
			}
			cout << endl;
		}

	}
}